~~ server names: 
~~              ajara
~~              atrisia
~~              anaxes


~~ enable SCRAM authentification on ALL MongoDB instances
mongo
> use admin
> db.createUser({ user: "superhero",  pwd: "secret", roles: ["root"]});
> db.shutdownServer();

~~ add in MongoDB configuration file ->
security:
  authorization: 'enabled'
<-------------------------------------

~~ start MongoDB instance
/app/mongodb/product/current_version/bin/mongod --config=/app/mongodb/conf/mongod.conf --logpath=/app/mongodb/log/mongod.log --fork

~~ test connection
mongo --username=superhero --password=secret

~~ for internal communication between instances we will use a basic keyFile method

~~ generate keyfile 
openssl rand -base64 756 > /app/mongodb/conf/keyfile.basic
chmod 600 /app/mongodb/conf/keyfile.basic

~~ add the keyfile in MongoDB configuration file ->
security:
  authorization: 'enabled'
  keyFile: /app/mongodb/conf/keyfile.basic
<-------------------------------------

~~ restart MongoDB instance and test connection again
/app/mongodb/product/current_version/bin/mongod --config=/app/mongodb/conf/mongod.conf --shutdown
/app/mongodb/product/current_version/bin/mongod --config=/app/mongodb/conf/mongod.conf --logpath=/app/mongodb/log/mongod.log --fork

mongo --username=superhero --password=secret

~~ repeat theses operations on other 2 MongoDB instances using the SAME keyfile generated for the first instance

~~ for all MongoDB instances, declare the replication in configuration file

------------------------------------------>
replication:
  replSetName: rs0
<-----------------------------------------


mongo --username=superhero --password=secret

rsconf = {
           _id: "rs0",
           members: [
                      {
                       _id: 0,
                       host: "ajara:27017"
                      }
                    ]
         }


rs.initiate(rsconf);

rs.add('atrisia:27017');
rs.add('anaxes:27017');

rs.conf();
rs.status();


~~ ckeck if replication works
~~ on PRIMARY instance create a database and a collection
rs0:PRIMARY> use db01;
rs0:PRIMARY> db.movies.insertOne({"title" : "Stand by Me"});

~~ on SECONDARIES check if the collection has been replicated
~~ note that a slave, before running a query, we should activate the read-only acces using the following command
rs0:SECONDARY> rs.slaveOk();

rs0:SECONDARY> use db01;
rs0:SECONDARY> db.movies.find();

~~ finaly, drop the test database from the master node
rs0:PRIMARY> db.dropDatabase();

~~ to user on SECONDARY replica to display lag and oplog size
db.getReplicationInfo();

~~ to find the mester of a replica set, use the following command on any member of replica set
db.isMaster();

~~ get replica set congig
config = rs.conf();

~~ remove a member from a replica set
rs.remove('anaxes:27017');
rs.reconfig(config, {force: true});
